/* eslint-disable */
/*
    json传值  headers:{"Content-Type":"application/json;charset=UTF-8"}   JSON.stringify(data)
    return JSON.stringify(data)
    form传值  headers:{"Content-Type":" application/x-www-form-urlencoded"}
    var dataArr=[]
    for(let i in data){dataArr.push(`${i}=${data[i]}`)}
    return dataArr.join("&")
*/

//随机生成指定数量的16进制key
function generatekey(num) {
  let library =
    'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';

  let key = '';

  for (let i = 0; i < num; i++) {
    let randomPoz = Math.floor(Math.random() * library.length);
    key += library.substring(randomPoz, randomPoz + 1);
  }
  return key;
}
import { Message } from 'element-ui';
import router from '@/router';
import crypto from '../common/AES';

//用于继承
const OPENCRYPTO = process.env.NODE_ENV !== 'development' || false; //打开加密的开关，默认是development环境关闭，其他环境打开。 此处手动修改是否加密后，在HTTP/index.js文件中要做相应的修改

class HttpHandlers {
  // 添加请求拦截器
  interceptorsReqBefor(config) {
    // 在发送请求之前做些什么
    const token = window.sessionStorage.getItem('token');
    // 添加token到请求
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    // console.log(config['data'],'请求之前的参数=======================')
    let iv = generatekey(16);

    // config['data'] = { value: crypto.encrypt(JSON.stringify(config['data'])) }//加密，上线时使用
    //去除加密
    config['data'] = OPENCRYPTO
      ? { value: iv + crypto.encrypt(JSON.stringify(config['data']), null, iv) }
      : { value: config['data'] };
    return config;
  }
  interceptorsReqErr(error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
  // 添加响应拦截器
  interceptorsResBefor(response) {
    // 对响应数据做点什么
    if (OPENCRYPTO && response.data.code == '0000000000') {
      if (response.data.data) {
        let iv = response.data.data.slice(0, 16);
        let data = response.data.data.slice(16, response.data.data.length);
        response.data.data = response.data.data
          ? JSON.parse(crypto.decrypt(data, null, iv))
          : response.data;
        return response.data;
      } else {
        return response.data;
      }
    } else if (
      response.data.code == 'YA0HRTDC01' ||
      response.data.code == 'YA0HRTDC02' ||
      response.data.code == 'YA0KACDC06' ||
      response.data.code == 'YA0HRTDC04' ||
      response.data.code == 'YA0KACDC07'
    ) {
      //token过期--token无效--用户未登录--账号已禁用
      if (response.data.code == 'YA0KACDC07') {
        router.replace('/');
        sessionStorage.clear();
      } else {
        Message.error(`${response.data.msg},请重新登录！`);
        router.replace('/');
        return response.data;
      }
    } else {
      Message.error(`${response.data.msg}！`);
      return response.data;
    }

    // else if(response.data.code == 'YA0HRTDC0D'){
    //   Message.error(`服务器异常！`);
    //   return response.data
    // }else if(response.data.code == 'YA0HRTDC05'){
    //   Message.error(`${response.data.msg}`);
    //   return response.data
    // }
    // return response;

    // if (response.data.result && response.data.result.code == '1') {
    //     response.data.result.data = response.data.result.data ? JSON.parse(crypto.decrypt(response.data.result.data)) : response.data.result.data
    //     console.log(response.data.result.data,'响应数据========================')
    //     return response
    // }
    // return response
  }
  interceptorsResErr(error) {
    // 对响应数据做点什么
    return Promise.reject(error);
  }
  //`transformRequest` 允许在向服务器发送前，修改请求数据
  transformRequest(data) {
    return JSON.stringify(data);
  }
  //`transformResponse` 在传递给 then/catch 前，允许修改响应数据
  transformResponse(data) {
    return JSON.parse(data);
  }
}

export default HttpHandlers;
